import { Role } from "@/share/enums/enum";

/**
 * 创建一个授权中间件函数。
 * 该中间件用于检查用户角色是否具有访问权限。
 * @param role 用户所需的角色。用于与用户的角色进行比较，以确定是否有访问权限。
 * @returns 返回一个中间件函数，该函数用于实际的权限检查和控制流程。
 */
export function auth(role: Role) {
  /**
   * 中间件函数，用于授权检查。
   * @param c 上下文对象，包含请求和响应等信息。
   * @param next 下一个中间件函数，表示中间件链的继续。
   * @returns 如果用户角色匹配，则执行下一个中间件；否则，返回无权限的响应。
   */
  return async function _auth(c: Context, next: Next) {
    // 检查用户对象是否存在，如果不存在，则直接返回未登录的响应。
    if (!c.user) return c.noAuth();

    // 如果用户的角色与所需角色匹配，则继续执行下一个中间件。
    if (c.user.role === role) return await next();

    // 如果用户角色不匹配，则返回无权限的响应。
    return c.noPer();
  };
}
